<?php

class OpinionController extends Controller
{

    public function actionAdd()
    {
	$content = Yii::app()->getRequest()->getParam('content');
	$content = PurifierManager::getInstance()->filter($content);
	if (!$content) {
	    Yii::app()->user->setFlash('emptyOpinionContent', 'Текст отзыва не указан');
	    Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
	}
	$targetId = Yii::app()->getRequest()->getParam('target_id', false);
	if (!$targetId) {
	    Yii::app()->user->setFlash('emptyOpinionTargetId', 'Идентификатор записи не указан');
	    Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
	}
	$targetType = Yii::app()->getRequest()->getParam('target_type', false);
	if (!$targetType) {
	    Yii::app()->user->setFlash('emptyOpinionTargetType', 'Идентификатор записи не указан');
	    Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
	}

	$recordModel = FactoryService::get($targetType)->get($targetId);
	if (!$recordModel) {
	    Yii::app()->user->setFlash('emptyRecordModel', 'Такой записи у нас нету');
	    Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
	}

	$data = array(
	    'target_id' => $targetId,
	    'target_type' => $targetType,
	    'user_id' => Yii::app()->user->getId(),
	    'content' => $content,
	    'add_date' => date('Y-m-d H:i:s'),
	    'user_rating' => Yii::app()->getRequest()->getParam('user_rating', 0)
	);
	$features = Yii::app()->getRequest()->getParam('features', false);
	if (!empty($features)) {
	    $keys = array_keys($features);
	    foreach ($keys as $key) {
		$data['has_' . $key] = 1;
	    }
	}
	$model = new OpinionModel((object) $data);
	if (FactoryService::get('opinion')->save($model)) {
	    if (!empty($features)) {
		FactoryService::get('opinion')->compareFeatures($model, $features);
	    }
	}
	else {
	    Yii::app()->user->setFlash('cantWrite', 'Произошла ошибка во время записи');
	}

	Yii::app()->getRequest()->redirect(Yii::app()->getRequest()->getUrlReferrer());
	Yii::app()->end();
    }

    public function actionList()
    {
	$type = Yii::app()->getRequest()->getParam('type');
	$action = '_action' . ucfirst($type) . 'List';
	call_user_func(array($this, $action));
    }

    protected function _actionPositiveList()
    {
	$page = Yii::app()->getRequest()->getParam('page', 1);
	$pager = new CPagination(FactoryService::get('opinion')->getOpinionPositiveCount());
	$pager->setPageSize(Yii::app()->params['perPage']);

	SeoManager::getInstance()->set(array(
	    'title' => 'Позитивные мнения людей о товарах, услугах, людях',
	    'description' => 'Позитивные мнения людей о товарах, услугах, людях',
	    'keywords' => 'Позитивные, мнения, людей, товарах, услугах, людях',
	));
	$modelList = FactoryService::get('opinion')->getLastPositiveOpinions($page, $pager->getLimit());
	$this->render('list', array(
	    'models' => $modelList,
	    'pager' => $pager,
	    'page' => $page,
	    'perPage' => Yii::app()->params['perPage']
		)
	);
    }

    protected function _actionNegativeList()
    {
	$page = Yii::app()->getRequest()->getParam('page', 1);
	$pager = new CPagination(FactoryService::get('opinion')->getOpinionNegativeCount());
	$pager->setPageSize(Yii::app()->params['perPage']);
	SeoManager::getInstance()->set(array(
	    'title' => 'Негативные мнения людей о товарах, услугах, людях',
	    'description' => 'Негативные мнения людей о товарах, услугах, людях',
	    'keywords' => 'Негативные, мнения, людей, товарах, услугах, людях',
	));
	$modelList = FactoryService::get('opinion')->getLastNegativeOpinions($page, $pager->getLimit());
	$this->render('list', array(
	    'models' => $modelList,
	    'pager' => $pager,
	    'page' => $page,
	    'perPage' => Yii::app()->params['perPage']
		)
	);
    }

}

?>
